package guiceberry2_junit3.tutorial_1_server;
import com.google.inject.Inject;
import com.google.inject.Module;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.google.inject.testing.guiceberry.GuiceBerryEnvMain;
import com.google.inject.testing.guiceberry.TestId;
import com.google.inject.testing.guiceberry.controllable.IcMaster;
import com.google.inject.testing.guiceberry.controllable.SharedStaticVarIcStrategy;
import com.google.inject.testing.guiceberry.controllable.TestIdServerModule;
import com.google.inject.testing.guiceberry.junit3.GuiceBerryJunit3Env;
import guiceberry2_junit3.tutorial_1_server.prod.MyPetStoreServer;
import guiceberry2_junit3.tutorial_1_server.prod.PetOfTheMonth;
import guiceberry2_junit3.tutorial_1_server.prod.PortNumber;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public final class PetStoreEnv4CanonicalSameJvmControllablePotm extends GuiceBerryJunit3Env {
@Provides
@PortNumber
int getPortNumber(MyPetStoreServer server) {
return server.getPortNumber();
}
@Provides
WebDriver getWebDriver(@PortNumber int portNumber, TestId testId) {
WebDriver driver = new HtmlUnitDriver();
driver.get("http://localhost:" + portNumber);
driver.manage().addCookie(
new Cookie(TestId.COOKIE_NAME, testId.toString()));
return driver;
}
@Provides
@Singleton
MyPetStoreServer buildPetStoreServer() {
MyPetStoreServer result = new MyPetStoreServer(8080) {
@Override
protected Module getPetStoreModule() {
// !!! HERE !!!
return icMaster.buildServerModule(
new TestIdServerModule(),
super.getPetStoreModule());
}
};
return result;
}
private IcMaster icMaster;
@Override
protected void configure() {
super.configure();
bind(GuiceBerryEnvMain.class).to(PetStoreServerStarter.class);
// !!!! HERE !!!!
icMaster = new IcMaster()
.thatControls(SharedStaticVarIcStrategy.strategy(),
PetOfTheMonth.class);
install(icMaster.buildClientModule());
}
private static final class PetStoreServerStarter implements GuiceBerryEnvMain {
@Inject
private MyPetStoreServer myPetStoreServer;
public void run() {
// Starting a server should never be done in a @Provides method
// (or inside Provider's get).
myPetStoreServer.start();
}
}
}